﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using Atacadao.Comum.Pesquisa;

namespace Atacadao.Comum.DAL
{
    public interface IRepositorio<TEntity>: IDisposable where TEntity : class, new()
    {
        void Incluir(TEntity entidade);
        void Excluir(params object[] ids);
        void Excluir(TEntity entidade);
        void Alterar(TEntity entidade);
        int Salvar();
        TEntity RecuperarPorID(params object[] id);
        IQueryable<TEntity> RecuperarTodos();
        IQueryable Repositorio(string entidade);
        IQueryable<TEntity> Recuperar(Expression<Func<TEntity, bool>> filtro = null,
            Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> ordenar = null,
            string incluirPropriedades = "");

        //IEnumerable<TEntity> Recuperar(Expression<Func<TEntity, bool>> filtro = null,
        //    string ordenar = null,
        //    string propriedades = null, int inicio = 0, int quantidade = 0);
        //IEnumerable<TEntity> Recuperar(IEnumerable<Comum.Pesquisa.CampoPesquisa> parametros, string ordenar);
        //IEnumerable<TEntity> Recuperar(IEnumerable<Comum.Pesquisa.CampoPesquisa> parametros, string ordenar, int pular, int quantidade);
        //int SalvarDados();
    }
}
